// packageA/pages/repairCosts/repairCosts.js
const app = getApp();
import CommonService from '../../../utils/service/commonService.js';
import Toast from '../../../miniprogram_npm/@vant/weapp/toast/toast';
import Dialog from '../../../miniprogram_npm/@vant/weapp/dialog/dialog';
const util = require('../../../utils/util');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    //传参
    paramObj:{},
    //列表
    list:[],
    //提交按钮禁用
    disabled:false,
    //选择框
    showSelect:false,
    //选择数据
    selectList:[],
    //当前选择
    selectField:'',
    //选择框标题
    selectTitle:'',
    //显示选择搜索框
    showSelectSearch:false,
    //时间选择框
    showTime:false,   
    //当前时间
    current: new Date().getTime(), 
    //时间格式
    formatter (type, value) {
      if (type === 'year') {
        return `${value}年`
      } else if (type === 'month') {
        return `${value}月`
      } else if (type === 'day') {
        return `${value}日`
      } else if (type === 'hour') {
        return `${value}时`
      } else if (type === 'minute') {
        return `${value}分`
      } else if (type === 'second') {
        return `${value}秒`
      }
      return value
    },
    //人员类型
    typeMap:null,
    //上传路径
    ossUploadUrl: app.globalData.ossUrl
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    if(options.paramObj){
      let paramObj=JSON.parse(options.paramObj);

      console.log('维修工单-费用-传参');
      console.log(paramObj);

      this.setData({
        paramObj: paramObj
      })

      //获取服务人员类型(字典)
      this.getType();

      //获取列表数据
      this.getList();
    }
  },

  //提交表单
  confirmForm(e){
    //避免表单重复提交-先禁用按钮
    this.setData({
      disabled:true
    })

    let td=this.data;
    let list=td.list;
    let listNew=[];

    if(list.length){
      //非空验证
      let len=list.length-1;
      if(list[len].type && (list[len].staff || list[len].staffName)){
      }else{
        Toast.fail('当前费用信息未完成');
        return;
      }
      
      list.forEach(item => {
        let obj={
          type: item.type,
          cost: Number(item.cost),
          remark: item.remark,
          costImg: item.costImg
        }

        if(item.type.id!=221){
          //费用项目是人员费
          obj.staff=item.staff;
          //平台人员
          if(obj.staff.type==33){
            obj.beginDate = item.beginDate;
            obj.endDate = item.endDate;
            obj.mileage = Number(item.mileage ? item.mileage : 0);
            //汽油费(=1.1元/公里*公里数)
            obj.fuel = 1.1 * obj.mileage;
            obj.toll = Number(item.toll ? item.toll : 0);
            obj.parking = Number(item.parking ? item.parking : 0);
            obj.taxi = Number(item.taxi ? item.taxi : 0);
            obj.bus = Number(item.bus ? item.bus : 0);
            obj.otherTransportation = Number(item.otherTransportation ? item.otherTransportation : 0);
            obj.otherCost = Number(item.otherCost ? item.otherCost : 0);
            //费用相加
            obj.cost = obj.fuel + obj.toll + obj.parking + obj.taxi + obj.bus + obj.otherTransportation + obj.otherCost;
          }
        }else if(item.type.id==221){
          //费用项目是公关费
          obj.staff={
            id: 0,
            name: item.staffName,
            phone: "",
            type: 0
          };
        }

        listNew.push(obj);
      });

      //判断是否输入的数字
      let flag = listNew.some(el=>{
        return isNaN(el.cost);
      })
      if(flag){
        Toast.fail('费用请输入数字');
        return;
      } 
    }  

    let param={
      className:'afterSaleMaintainOrder',
      data:{
        id: this.data.paramObj.repairId,
        costs: listNew
      }
    }
    
    // console.log(param.data);
    // return;

    //避免表单重复提交
    Toast.loading({
      duration: 0,
      forbidClick: true,
      message: '数据提交中...'
    });

    CommonService.goSave(param).then(res=>{
      this.setData({
        disabled:false
      })
      if (res.statusCode == 200 && res.data.success == true){
        Toast.success('成功');
        setTimeout(() => {
          //返回列表页并刷新数据
          this.backAndRefresh();
        }, 1000);
      }else{
        Toast.fail('操作失败');
      }
    }).catch((error) => {
      Toast.fail('操作失败');
    })
  },

  //获取列表数据
  getList(){
    Toast.loading({
      duration: 0,
      forbidClick: true,
      message: '加载中...'
    });

    let param = {
      isAuth: false,
      className: 'afterSaleMaintainOrder',
      data: {
        id: this.data.paramObj.repairId,
        selectFields: ['id','costs']
      }
    }

    CommonService.goFindList(param).then(res => {
      Toast.clear();
      if(res.data.data && res.data.data.result && res.data.data.result.length) {
        let result=res.data.data.result[0];
        if(result.costs && result.costs.length){
          console.log('费用列表');
          console.log(result.costs);
          
          result.costs.forEach(item => {
            //处理公关费的人员
            if(item.type.id==221){
              item.staffName=item.staff.name;
            }

            //图片去掉url
            try{
              if(item.costImg && item.costImg.length){
                let imgs=[];
                item.costImg.forEach(item => {
                  imgs.push(item.url);
                });
                item.self_url=imgs;
              }

              //人员类型
              if(this.data.typeMap){
                item.staff.self_staffType=this.data.typeMap.get(item.staff.type);             
              }
            } catch (e) {
            }                       
          });  

          this.setData({
            list: result.costs
          })
        }else{
          this.init();
        }
      }else{
        this.init();
      }
    }).catch((error) => {
      this.init();
    })
  },

  //初始化列表
  init(){
    this.setData({
      list: [{
        type: null,
        cost: null,
        remark: null,
        staff: null,
        staffName: null
      }]
    })
  },

  //添加费用
  onAdd(){
    let list=this.data.list;

    //未填写不能加新的
    if(list.length){
      let len=list.length-1;
      if(list[len].type && (list[len].staff || list[len].staffName)){
      }else{
        Toast.fail('当前费用信息未完成');
        return;
      }
    }

    list.push({
      type: null,
      cost: null,
      remark: null,
      staff: null,
      staffName: null
    });

    this.setData({
      list: list,
      disabled: false
    })
  },

  //删除费用
  ondelete(e){
    Dialog.confirm({
      title: '确认删除此费用吗',
      confirmButtonText:'确认',
      cancelButtonText:'不删除了'
    }).then(() => {
      let list=this.data.list;
      let dataset=e.currentTarget.dataset;
      let arr=[];

      list.forEach((item,index) => {
        if(index!=dataset.index){
          arr.push(item);
        }
      });

      this.setData({
        list: arr,
        disabled: false
      })
    }).catch(() => {
    });
  },

  //显示选择框
  onShowSelect(e){
    this.setData({
      selectList: []
    })

    let dataset=e.target.dataset;
    let field=dataset.field;

    this.setData({
      showSelect: true,
      selectField: field
    })

    //费用项目
    if(field=='type'){
      this.setData({
        selectTitle: '费用项目',
        showSelectSearch: false,
        currentIndex: dataset.index
      })
      this.getTypeList();
    }

    //人员
    if(field=='staff'){
      this.setData({
        selectTitle: '人员',
        showSelectSearch: true,
        currentIndex: dataset.index
      })
      this.getUserList();
    }
  },

  //隐藏选择框
  onCloseSelect(){
    this.setData({
      showSelect: false,
      valueSearch: ''
    })
  },

  //确认选项
  onConfirmSelect(e){
    let selectField=this.data.selectField;
    let id=null,name=null,obj=null;

    //费用项目和人员
    if(selectField=='type' || selectField=='staff'){
      let obj=e.detail.value.obj;
      let currentIndex=this.data.currentIndex;
      let list=this.data.list;

      list.forEach((item,index) => {
        if(index==currentIndex){
          if(selectField=='type'){
            item.type=obj;
          }

          if(selectField=='staff'){
            item.staff=obj;
            if(this.data.typeMap){
              item.staff.self_staffType=this.data.typeMap.get(obj.type);             
            }
          }

          //费用清零
          item.cost=null;
        }
      });

      this.setData({
        list:list,
        disabled: false
      })
    }

    if(id && name){
      this.setData({
        [id]:e.detail.value.id,
        [name]:e.detail.value.text
      })
    }

    if(obj){
      this.setData({
        [obj]:e.detail.value.obj
      })
    }

    this.onCloseSelect();
  },

  //选择框搜索
  onChangeSelectVal(e){
    let selectField=this.data.selectField;

    this.setData({
      valueSearch: e.detail
    })

    //人员
    if(selectField=='staff'){
      this.getUserList();
    }
  },

  //查询费用项目
  getTypeList(){
    let param = {
      isAuth: false,
      className: 'dictionary',
      data: {
        key: 'maintainOrderCostType',
        searchAll: true,
        selectFields: ['id','name']
      }
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let result=res.data.data.result;
        let arr=[];
        result.forEach(item => {
          arr.push({
            text:item.name,
            id:item.id,
            obj:{
              id:item.id,
              name:item.name
            }
          });
        });

        this.setData({
          selectList: arr
        })
      }
    }).catch((error) => {
    })
  },

  //查询人员
  getUserList(){
    //先清空
    this.setData({
      selectList: []
    })

    let param = {
      isAuth: false,
      className: 'servicePersonal',
      data: {
        key: 'maintainOrderCostType',
        searchAll: true,
        selectFields: ['id','serviceName','type','telephone','userId']
      }
    }

    //按平台查询记录
    let appId=app.globalData.myAppId;
    if(appId!=3){
      //是否独立售后
      if(app.globalData.afterSaleSelf){
        param.data.appId=app.globalData.myAppId;
      }else{
        param.data.appId=[2,3,null];
      }
    }else{
      param.data.appId=[2,3,null];
    }

    if(this.data.valueSearch){
      param.data.serviceName='%' + this.data.valueSearch + '%';
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let result=res.data.data.result;
        let arr=[];
        result.forEach(item => {
          arr.push({
            text:item.serviceName,
            id:item.id,
            obj:{
              id: item.id,
			        name: item.serviceName,
			        phone: item.telephone,
              type: item.type,
              userId: item.userId
            }
          });
        });

        this.setData({
          selectList: arr
        })
      }
    }).catch((error) => {
    })
  },

  //获取输入的值
  onGetValue(e){
    let dataset=e.currentTarget.dataset;
    let val=e.detail;
    let list=this.data.list;  

    list.forEach((item,index) => {
      if(index==dataset.index){
        item[dataset.field]=val.trim();  
      }
    });

    this.setData({
      list: list,
      disabled: false
		})
  },

  //获取输入的费用
  onGetValueCost(e){
    let dataset=e.currentTarget.dataset;
    let val=e.detail;
    let list=this.data.list;  

    list.forEach((item,index) => {
      if(index==dataset.index){
        item[dataset.field]=val.trim();

        //计算汽油费
        if(dataset.field=='mileage'){
          if(isNaN(val)){
            item.fuel='-';
          }else{
            item.fuel=(1.1 * Number(val)).toFixed(2);
          }
        }

        //费用相加
        let total = Number(item.fuel ? item.fuel : 0) + 
                    Number(item.toll ? item.toll : 0) + 
                    Number(item.parking ? item.parking : 0) + 
                    Number(item.taxi ? item.taxi : 0) + 
                    Number(item.bus ? item.bus : 0) + 
                    Number(item.otherTransportation ? item.otherTransportation : 0) + 
                    Number(item.otherCost ? item.otherCost : 0);

        if(isNaN(total)){
          item.cost='-';          
        }else{
          item.cost=total.toFixed(2);
        }          
      }
    });

    this.setData({
      list: list,
      disabled: false
		})
  },

  //返回列表页并刷新数据
  backAndRefresh(){
    let pages = getCurrentPages();
    let prevPage = pages[pages.length - 2];

    prevPage.refreshListAndPage();
    wx.navigateBack();
  },

  //显示时间
  onShowTime(e){
    let dataset=e.currentTarget.dataset;

    this.setData({
      showTime: true,
      currentIndex: dataset.index,
      currentTimeField: dataset.field
    }) 
  },

  //隐藏时间
  onCloseTime(){
    this.setData({ 
      showTime: false 
    })
  },

  //确认时间
  onConfirmTime(e) {
    let currentIndex=this.data.currentIndex;
    let currentTimeField=this.data.currentTimeField;
    let list=this.data.list;

    list.forEach((item,index) => {
      if(index==currentIndex){        
        //判断时间
        let start=null,end=null;
        if(currentTimeField=='beginDate'){
          start=e.detail;
          if(item.endDate){
            end=new Date(item.endDate.replaceAll("-","/")).getTime();
          }
        }
        if(currentTimeField=='endDate'){
          end=e.detail;
          if(item.beginDate){
            start=new Date(item.beginDate.replaceAll("-","/")).getTime();
          }
        }

        if(start && end){
          if(!this.checkedDate(start,end)){
            Toast.fail('结束时间最少比开始时间，晚5分钟');
            return;
          }
        }
        
        item[currentTimeField]=util.timeFormat(e.detail);
      }
    });

    this.setData({
      list:list
    })

    this.onCloseTime();
  },

  //检测时间-结束时间需要比开始时间至少大5分钟（传参为时间戳）
  checkedDate(start,end){
    let nums=end-start;
    if(nums<1000*60*5){
      return false;
    }else{
      return true;
    }
  },

  //图片上传
  getUploadUrl(data){
    let list=this.data.list;
    let currentIndex=data.currentTarget.dataset.index;
    let detail=data.detail;

    if(detail.length){
      let imgArr=[];
      detail.forEach(item => {
        imgArr.push({
          url:item
        });
      });

      list.forEach((item,index) => {
        if(index==currentIndex){
          item.costImg=imgArr;
        }
      });
    }

    this.setData({
      list:list
    })
  },

  //获取服务人员类型(字典)
  getType(){
    let param = {
      isAuth: false,
      className: 'dictionary',
      data: {
        searchAll: true,
        key: 'serviceStaffType',
        selectFields: ['id','name']
      }
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let result=res.data.data.result;
        let typeMap=new Map(); 
        result.forEach(item => {
          typeMap.set(item.id,item.name);
        });
        this.setData({
          typeMap: typeMap
        })
      }
    }).catch((error) => {
    })
  },  

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})
